この章では、エラーおよび警告の取得方法について説明した後、すべてのエラーおよび警告をエラー番号順にリストします。
次の例に示すとおり、JDBCでは、ネイティブ・エラー・コードおよびメッセージを取得できます。
try { private static void printSQLExceptions(SQLException e) { while (e != null) { System.out.println("SQLState: " + e.getSQLState()); System.out.println("Message : " + e.getMessage()); System.out.println("Vendor : " + e.getErrorCode()); e = e.getNextException(); System.out.println(""); } e.printStackTrace(); } . . . try { // JDBC method calls here } catch (SQLException ex) { ex.printSQLExceptions(); } . . . }次の例に示すとおり、ODBCでは、ネイティブ・エラー・コードおよびメッセージは、SQLError関数を使用して取得できます。
#define MSG_LNG 512 SQLCHAR szSqlState[MSG_LNG]; /* SQL state string */ SQLINTEGER pfNativeError; /* Native error code */ SQLCHAR szErrorMsg[MSG_LNG]; /* Error msg text buffer pointer */ SQLSMALLINT pcbErrorMsg; /* Error msg text Available bytes */ SQLRETURN ret = SQL_SUCCESS;
while ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) { ret = SQLError(henv, hdbc, hstmt, szSqlState, &pfNativeError, szErrorMsg, MSG_LNG, &pcbErrorMsg); switch (ret) { case SQL_SUCCESS: fprintf(stderr, "*** %s\n*** ODBC Err = %s, " "TimesTen Err = %ld\n", szErrorMsg, szSqlState, pfNativeError); break; case SQL_SUCCESS_WITH_INFO: fprintf(stderr, "*** Call to SQLError failed with return " "code of SQL_SUCCESS_WITH_INFO.\n " "*** Need to increase size of " "message buffer.\n"); break; case SQL_INVALID_HANDLE: fprintf(stderr, "*** Call to SQLError failed with " "return code of SQL_INVALID_HANDLE.\n"); break; case SQL_ERROR: fprintf(stderr, "*** Call to SQLError failed with " "return code of SQL_ERROR.\n"); break; case SQL_NO_DATA_FOUND: break; } }1回のODBC操作またはJDBC操作で、複数のエラーを生成できます。これらのエラーは、ODBC関数SQLErrorまたはJDBCメソッドSQLExceptionを複数回コールすることによって取得できます。